package com.hd.quartz.controller;

import com.hd.quartz.annotation.SysLog;
import com.hd.quartz.common.FieldNameConstants;
import com.hd.quartz.common.PageUtils;
import com.hd.quartz.common.R;
import com.hd.quartz.common.ValidatorUtils;
import com.hd.quartz.entity.ScheduleJobEntity;
import com.hd.quartz.service.ScheduleJobService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.Map;

/**
 * <h3>partitionjob</h3>
 * <p>controller.ScheduleController</p>
 * 定时任务 控制器 接口
 * @author : hduong
 * @version : 1.0
 * @date : 2020-09-14 17:57
 **/
@RestController
@RequestMapping("/web/job")
public class ScheduleJobController {


    /**
     * 任务 定时 器 服务
     */
    @Autowired
    private ScheduleJobService scheduleJobService;

    /*
      * 查询任务列表 √
      * 查询任务详情 √
      * 新增定时任务 : 新增任务类 + 通过quartz定时化任务 √
      * 修改定时任务 : 修改执行时间 √
      * 删除定时任务 : 删除 quartz定时化任务
      * 立即执行定时任务
      * 暂停执行定时任务
      * 恢复定时任务
     */

    /**
     * 查询定时任务列表 : 查询全部
     * 传入参数 beanName
     * @param params
     * @return
     */
    @RequestMapping(value = "/list", method = RequestMethod.POST)
    public R list(@RequestBody Map<String, Object> params) {
        PageUtils page = scheduleJobService.queryPage(params);
        return R.ok().put(FieldNameConstants.RESULT_PAGE, page);
    }

    /**
     * 获取任务详情
     * @param jobId
     * @return
     */
    @RequestMapping(value = "/info/{jobId}", method = RequestMethod.POST)
    public R info(@PathVariable("jobId") Long jobId) {
        ScheduleJobEntity jobEntity = scheduleJobService.getById(jobId);
        return R.ok().put(FieldNameConstants.DETAIL_JOB, jobEntity);
    }

    /**
     * 修改定时任务
     * @param scheduleJobEntity
     * @return
     */
    @SysLog("修改定时任务")
    @RequestMapping(value = "/update", method = RequestMethod.POST)
    public R update(@RequestBody ScheduleJobEntity scheduleJobEntity) {
        ValidatorUtils.validateEntity(scheduleJobEntity);
        scheduleJobService.update(scheduleJobEntity);
        return R.ok();
    }

    /**
     * 保存定时 任务 :
     * 1: 批量
     * 2: 非批量
     * @param scheduleJobEntity
     * @return
     */
    @SysLog("保存定时任务")
    @RequestMapping(value = "/save", method = RequestMethod.POST)
    public R save(@RequestBody ScheduleJobEntity scheduleJobEntity) {
        ValidatorUtils.validateEntity(scheduleJobEntity);
        scheduleJobService.save(scheduleJobEntity);
        return R.ok();
    }


    /**
     * 根据Ids 批量删除
     * @param ids
     * @return
     */
    @SysLog(value = "删除定时任务")
    @RequestMapping(value = "/delete",  method = RequestMethod.POST)
    public R delete(Long[] ids) {
        scheduleJobService.deleteBatch(ids);

        return R.ok();
    }














}
